package com.sx.sx1.lintcode.day717;

public class LC381 {

    static class Solution {
        /**
         * @param n: An integer
         * @return: a square matrix
         */
        public int[][] generateMatrix(int n) {
            int[][] ans = new int[n][n];
            int rows = n;
            int cols=n;

            int all = n*n;
            //cutrows: 已经处理了多少圈了，行的角度 0->cutrows是已经处理了的
            //cutcols: 已经处理了多少圈了，列的角度 0->cutcols是已经处理了的
            int cutrows =0,cutcols =0,row=0,col=0,idx=0;
            while (idx< all){
                //idx>0 说明跑一圈了
                if(idx>0) {
                    rows-=1;cols-=1;cutrows+=1;cutcols+=1;
                }
                //处理每一圈的上边
                while (idx<all && col<cols) {
                    ans[row][col++] = idx+1;
                    idx++;
                }
                row+=1;
                col-=1;
                //处理每一圈的右边
                while (idx<all && row< rows){
                    ans[row++][col] =idx+1;
                    idx++;
                }
                row--;
                col--;
                //处理每一圈的下边
                while (idx<all && col>=cutcols) {
                    ans[row][col--] = idx+1;
                    idx++;
                }
                row-=1;
                col+=1;
                //处理每一圈的左边
                while (idx<all && row>cutrows){
                    ans[row--][col] =idx+1;
                    idx++;
                }
                row+=1;
                col+=1;
            }

            return ans;
        }
    }


    public static void main(String[] args) {
        int[][] arr = new Solution().generateMatrix(3);
        for (int[] v : arr) {
            for (int i : v) {
                System.out.print(i+" ");
            }
            System.out.println();
        }
    }
}


/*
LintCode-Logo
搜索题目、标签、题集
中文
avatar
您有201条未读消息，请及时查看
381 · 螺旋矩阵 II
算法
中等
通过率
46%

题目
题解16
笔记
讨论99+
排名
记录
描述
给定一个数n, 生成一个包含1~
𝑛
2
n
2
 的螺旋形矩阵.

(螺旋由外向内顺时针旋转, 可参照样例)

最短时间刷“透”算法面试：《66页算法宝典》.pdf

微信添加【jiuzhangfeifei】备注【66】领取


样例
样例 1:

输入: 2
输出:
[
  [1, 2],
  [4, 3]
]
样例 2:

输入: 3
输出:
[
  [ 1, 2, 3 ],
  [ 8, 9, 4 ],
  [ 7, 6, 5 ]
]
标签
相关题目

374
螺旋矩阵
中等
推荐课程

春招算法高频题冲刺班
精准押题，抱佛脚突击算法面试，最近6个月新题/难题/高频题全覆盖！
已开启智能提示
发起考试
30 分 00 秒
123456789

控制台
        历史提交

 */